<?php

/*
 * Usuario DAL.
 * @Autor: Inicial.cl.
 */

class UsuarioDAL {

    //METODO PARA GRABAR USUARIO.
    public static function grabar($oUsuario) {
        try {
            $arr = array(
                "{#IDESTADO}" => $oUsuario->getIdEstado(),
                "{#IDTIPOUSUARIO}" => $oUsuario->getIdTipoUsuario(),
                "{#USUARIO}" => $oUsuario->getUsuario(),
                "{#EMAIL}" => $oUsuario->getEmail(),
                "{#PASSWORD}" => $oUsuario->getPassword(),
                "{#FECHAREGISTRO}" => $oUsuario->getFechaRegistro(),
                "{#FECHANACIMIENTO}" => $oUsuario->getFechaNacimiento(),
                "{#SEXO}" => $oUsuario->getSexo(),
                "{#RUTAAVATAR}" => $oUsuario->getRutaAvatar(),
                "{#IDPROFESION}" => $oUsuario->getIdProfesion(),
                "{#IDCOMUNA}" => $oUsuario->getIdComuna()
            );
            $query = Util::getQuery($arr, UsuarioSQL::$GRABAR_USUARIO);
            $arrDatos = Bd::exec($query);

            $id = Bd::$IDENTITY; //Retorno id insertado
            return $id;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA EDITAR USUARIO.
    public static function editar($oUsuario) {
        try {
            $arr = array(
                "{#ID}" => $oUsuario->getId(),
                "{#IDESTADO}" => $oUsuario->getIdEstado(),
                "{#IDTIPOUSUARIO}" => $oUsuario->getIdTipoUsuario(),
                "{#USUARIO}" => $oUsuario->getUsuario(),
                "{#EMAIL}" => $oUsuario->getEmail(),
                "{#PASSWORD}" => $oUsuario->getPassword(),
                "{#FECHAREGISTRO}" => $oUsuario->getFechaRegistro(),
                "{#FECHANACIMIENTO}" => $oUsuario->getFechaNacimiento(),
                "{#SEXO}" => $oUsuario->getSexo(),
                "{#RUTAAVATAR}" => $oUsuario->getRutaAvatar(),
                "{#IDPROFESION}" => $oUsuario->getIdProfesion(),
                "{#IDCOMUNA}" => $oUsuario->getIdComuna()
            );
            $query = Util::getQuery($arr, UsuarioSQL::$EDITAR_USUARIO);
            $arrDatos = Bd::exec($query);
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    //METODO PARA EDITAR PERFIL PROPIO USUARIO.
    public static function editarPerfilPropio($oUsuario) {
        try {
            $arr = array(
                "{#ID}" => $oUsuario->getId(),
                "{#FECHANACIMIENTO}" => $oUsuario->getFechaNacimiento(),
                "{#SEXO}" => $oUsuario->getSexo(),
                "{#RUTAAVATAR}" => $oUsuario->getRutaAvatar(),
                "{#IDPROFESION}" => $oUsuario->getIdProfesion(),
                "{#IDCOMUNA}" => $oUsuario->getIdComuna()
            );
            $query = Util::getQuery($arr, UsuarioSQL::$EDITAR_PERFIL_PROPIO);
            $arrDatos = Bd::exec($query);
            return 1;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA LISTAR USUARIO.
    public static function listar($oUsuario) {
        try {
            $arr = array(
                "{#ID}" => $oUsuario->getId(),
                "{#IDESTADO}" => $oUsuario->getIdEstado(),
                "{#IDTIPOUSUARIO}" => $oUsuario->getIdTipoUsuario(),
                "{#USUARIO}" => $oUsuario->getUsuario(),
                "{#EMAIL}" => $oUsuario->getEmail(),
                "{#PASSWORD}" => $oUsuario->getPassword(),
                "{#FECHAREGISTRO}" => $oUsuario->getFechaRegistro(),
                "{#FECHANACIMIENTO}" => $oUsuario->getFechaNacimiento(),
                "{#SEXO}" => $oUsuario->getSexo(),
                "{#RUTAAVATAR}" => $oUsuario->getRutaAvatar(),
                "{#IDPROFESION}" => $oUsuario->getIdProfesion(),
                "{#IDCOMUNA}" => $oUsuario->getIdComuna(),
                "{#CERTIFICADA}" => $oUsuario->getCertificada(),
                "{#DESTACADA}" => $oUsuario->getDestacada(),
                "{#RANKING}" => $oUsuario->getRanking()
                );
            $query = Util::getQuery($arr, UsuarioSQL::$LISTAR_USUARIO);
            $arrDatos = Bd::exec($query);
            $arrUsuario = array();

            if (count($arrDatos) > 0) {
                foreach ($arrDatos as $row) {
                    $oUsuario = new Usuario();

                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                    $oUsuario->setEstado($row["estado"]);
                    $oUsuario->setTipoUsuario($row["tipoUsuario"]);
                    $oUsuario->setDestacada($row["destacada"]);
                    $oUsuario->setCertificada($row["certificada"]);
                    $oUsuario->setRanking($row["ranking"]);

                    $arrUsuario[] = $oUsuario;
                }
            }

            return $arrUsuario;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA OBTENER POR ID USUARIO.
    public static function obtenerPorId($id) {
        try {
            $arr = array(
                "{#ID}" => $id
            );
            $query = Util::getQuery($arr, UsuarioSQL::$OBTENER_USUARIO_POR_ID);
            $arrDatos = Bd::exec($query);

            if (count($arrDatos) > 0) {
                $oUsuario = new Usuario();

                foreach ($arrDatos as $row) {
                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setFechaLogout($row["fechaLogout"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                    $oUsuario->setIdRegion($row["idRegion"]);
                }
                return $oUsuario;
            }
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA ELIMINAR USUARIO.
    public static function eliminar($id) {
        try {
            $arr = array("{#ID}" => $id);
            $query = Util::getQuery($arr, UsuarioSQL::$ELIMINAR_USUARIO);
            $arrDatos = Bd::exec($query);
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA ELIMINAR USUARIO.
    public static function validarLogin($oUsuario) {
        try {
            $arr = array(
                "{#EMAIL}" => $oUsuario->getEmail(),
                "{#USUARIO}" => $oUsuario->getEmail(),
                "{#PASSWORD}" => $oUsuario->getPassword());
            $query = Util::getQuery($arr, UsuarioSQL::$VALIDAR_LOGIN);
            $arrDatos = Bd::exec($query);

            if (count($arrDatos) > 0) {
                $oUsuario = new Usuario();

                foreach ($arrDatos as $row) {
                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                    $oUsuario->setFechaLogout($row["fechaLogout"]);
                }
            }
            return $oUsuario;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    //METODO PARA RECUPERAR PASSWORD DE USUARIO.
    public static function recuperarPassword($email, $usuario) {
        try {
            $arr = array(
                    "{#EMAIL}" => $email,
                    "{#USUARIO}" => $usuario
                );
            $query = Util::getQuery($arr, UsuarioSQL::$RECUPERAR_PASSWORD);
            $arrDatos = Bd::exec($query);
            $oUsuario = null;
            if (count($arrDatos) > 0) {
                $oUsuario = new Usuario();

                foreach ($arrDatos as $row) {
                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                    $oUsuario->setFechaLogout($row["fechaLogout"]);
                }
            }
            return $oUsuario;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function cerrarSession($id) {
        try {
            $arr = array("{#ID}" => $id);
            $query = Util::getQuery($arr, UsuarioSQL::$CERRAR_SESSION);
            $arrDatos = Bd::exec($query);
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA GRABAR USUARIO.
    public static function grabarDatosMinimos($oUsuario) {
        try {
            $arr = array(
                "{#IDESTADO}" => $oUsuario->getIdEstado(),
                "{#IDTIPOUSUARIO}" => $oUsuario->getIdTipoUsuario(),
                "{#USUARIO}" => $oUsuario->getUsuario(),
                "{#EMAIL}" => $oUsuario->getEmail(),
                "{#PASSWORD}" => md5($oUsuario->getPassword()),
                "{#FECHANACIMIENTO}" => $oUsuario->getFechaNacimiento(),
                "{#SEXO}" => $oUsuario->getSexo(),
                "{#AVATAR}" => $oUsuario->getRutaAvatar()
            );
            $query = Util::getQuery($arr, UsuarioSQL::$GRABAR_USUARIO_MIN);
            $arrDatos = Bd::exec($query);

            $id = Bd::$IDENTITY; //Retorno id insertado
            return $id;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    //METODO PARA CAMBIAR PASSWORD
    public static function cambiarPassword($idUsuario, $password) {
        try {
            $arr = array(
                "{#ID}" => $idUsuario,
                "{#PASSWORD}" => $password
            );
            $query = Util::getQuery($arr, UsuarioSQL::$CAMBIAR_PASSWORD);
            $arrDatos = Bd::exec($query);
            return 1;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    //METODO PARA OBTENER USUARIO PENDIENTE.
    public static function getUsuarioPendiente($idUsuario) {
        try {
            $arr = array(
                "{#ID}" => $idUsuario
            );
            $query = Util::getQuery($arr, UsuarioSQL::$GET_USUARIO_PENDIENTE);
            $arrDatos = Bd::exec($query);

            if (count($arrDatos) > 0) {
                $oUsuario = new Usuario();

                foreach ($arrDatos as $row) {
                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setFechaLogout($row["fechaLogout"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                }
                return $oUsuario;
            }
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    //METODO PARA VALIDAR USUARIO.
    public static function validarUsuario($idUsuario) {
        try {
            $arr = array(
                "{#ID}" => $idUsuario
            );
            $query = Util::getQuery($arr, UsuarioSQL::$VALIDAR_USUARIO);
            $arrDatos = Bd::exec($query);
            return 1;
        } catch (Excepcion $e) {
            return 0;
            throw new Exception($e->getMessage());
        }
    }
    
    //METODO PARA VALIDAR USUARIO O EMAIL EXISTE
    public static function validarUsuarioEmailExiste($usuario, $email) {
        try {
            $arr = array(
                    "{#EMAIL}" => $email,
                    "{#USUARIO}" => $usuario
                );
            $query = Util::getQuery($arr, UsuarioSQL::$VALIDAR_USUARIO_EMAIL_EXISTE);
            $arrDatos = Bd::exec($query);
            $oUsuario = null;
            
            if (count($arrDatos) > 0) {
                $oUsuario = new Usuario();

                foreach ($arrDatos as $row) {
                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                    $oUsuario->setFechaLogout($row["fechaLogout"]);
                }
            }
            return $oUsuario;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA ELIMINAR USUARIO.
    public static function validarLoginAdmin($oUsuario) {
        try {
            $arr = array(
                "{#EMAIL}" => $oUsuario->getEmail(),
                "{#USUARIO}" => $oUsuario->getEmail(),
                "{#PASSWORD}" => $oUsuario->getPassword(),
                "{#TIPO_USUARIO}" => Tipo_usuario::ADMINISTRADOR
            );
            $query = Util::getQuery($arr, UsuarioSQL::$VALIDAR_LOGIN_ADMIN);
            $arrDatos = Bd::exec($query);

            if (count($arrDatos) > 0) {
                $oUsuario = new Usuario();

                foreach ($arrDatos as $row) {
                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                    $oUsuario->setFechaLogout($row["fechaLogout"]);
                }
            }
            return $oUsuario;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }

    //METODO PARA LISTAR USUARIO.
    public static function listarUsuariosPago($oUsuario) {
        try {
            $arr = array(
                "{#IDTIPOUSUARIO}" => $oUsuario->getIdTipoUsuario()
                );
            $query = Util::getQuery($arr, UsuarioSQL::$LISTAR_USUARIO_PAGO);
            $arrDatos = Bd::exec($query);
            $arrUsuario = array();

            if (count($arrDatos) > 0) {
                foreach ($arrDatos as $row) {
                    $oUsuario = new Usuario();

                    $oUsuario->setId($row["id"]);
                    $oUsuario->setIdEstado($row["idEstado"]);
                    $oUsuario->setIdTipoUsuario($row["idTipoUsuario"]);
                    $oUsuario->setUsuario($row["usuario"]);
                    $oUsuario->setEmail($row["email"]);
                    $oUsuario->setPassword($row["password"]);
                    $oUsuario->setFechaRegistro($row["fechaRegistro"]);
                    $oUsuario->setFechaNacimiento($row["fechaNacimiento"]);
                    $oUsuario->setSexo($row["sexo"]);
                    $oUsuario->setRutaAvatar($row["rutaAvatar"]);
                    $oUsuario->setIdProfesion($row["idProfesion"]);
                    $oUsuario->setIdComuna($row["idComuna"]);
                    $oUsuario->setEstado($row["estado"]);
                    $oUsuario->setTipoUsuario($row["tipoUsuario"]);
                    $oUsuario->setDestacada($row["destacada"]);
                    $oUsuario->setCertificada($row["certificada"]);
                    $oUsuario->setMesesAtraso($row["mesesAtraso"]);
                    $oUsuario->setFechaUltimoPago($row["fechaUltimoPago"]);
                    $oUsuario->setMontoUltimoPago($row["montoUltimoPago"]);

                    $arrUsuario[] = $oUsuario;
                }
            }

            return $arrUsuario;
        } catch (Excepcion $e) {
            throw new Exception($e->getMessage());
        }
    }


}

?>